package com.dlyk.service.impl;

import com.dlyk.constant.Constants;
import com.dlyk.mapper.TranMapper;
import com.dlyk.model.Tran;
import com.dlyk.model.User;
import com.dlyk.query.BaseQuery;
import com.dlyk.query.TranQuery;
import com.dlyk.service.TranService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import org.springframework.beans.BeanUtils;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;
import java.util.UUID;

@Service
public class TranServiceImpl implements TranService {

    @Resource
    private TranMapper tranMapper;

    /**
     * 创建交易（添加）
     */
    @Override
    public int addTran(TranQuery tranQuery) {

        Tran tran = new Tran();

        // 使用BeanUtils工具将TranQuery对象的属性值复制到Tran对象
        BeanUtils.copyProperties(tranQuery, tran);

        // 获取创建者（当前登录用户）
        User loginUser = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

        // 设置创建者
        tran.setCreateBy(loginUser.getId());
        // 设置创建时间
        tran.setCreateTime(new Date());

        // 设置交易流水号（为了保证唯一性，这里采用UUID）
        tran.setTranNo(UUID.randomUUID().toString());
        // 设置交易阶段（新建的交易都在第一阶段：01创建交易，id：12）
        tran.setStage(12);

        return tranMapper.insertSelective(tran);
    }

    /**
     * 查询交易列表（分页查询）
     */
    @Override
    public PageInfo<Tran> getTranListByPage(Integer current) {

        // 1、设置PageHelper
        PageHelper.startPage(current, Constants.PAGE_SIZE);

        // 2、查询（传入一个BaseQuery类，用于条件查询拼接过滤SQL）
        List<Tran> tranList = tranMapper.selectTranListByPage(BaseQuery.builder().build());

        // 3、封装分页数据到PageInfo
        PageInfo<Tran> tranPageInfo = new PageInfo<>(tranList);

        return tranPageInfo;
    }

    /**
     * 根据id查询交易详情
     */
    @Override
    public Tran getTranDetailById(Integer id) {
        return tranMapper.selectTranDetailById(id);
    }

    /**
     * 编辑交易
     */
    @Override
    public int editTran(TranQuery tranQuery) {

        Tran tran = new Tran();

        // 使用BeanUtils工具将TranQuery对象的属性复制到Tran对象中
        BeanUtils.copyProperties(tranQuery, tran);

        // 获取编辑者（当前登录用户）
        User loginUser = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

        // 设置编辑者
        tran.setEditBy(loginUser.getId());
        // 设置编辑时间
        tran.setEditTime(new Date());

        return tranMapper.updateByPrimaryKeySelective(tran);
    }

}

